# 人工智能NLP-Agent数字人项目-02-日程提醒任务工单V1.1-20250217
import sqlite3
from typing import Any
from langchain.tools import BaseTool


class QueryTimerDB(BaseTool):
    # 工具名称
    name: str = "QueryTimerDB"
    # 工具描述
    description: str = "用于查询所有日程，返回的数据里包含3个参数:时间、循环规则（如:'1000100'代表星期一和星期五循环，'0000000'代表不循环）、执行的事项"

    def __init__(self):
        # 调用父类构造函数
        super().__init__()

    async def _arun(self, *args: Any, **kwargs: Any) -> Any:
        # 用例中没有用到 arun，直接抛出异常表明暂未实现
        raise NotImplementedError("异步方法 _arun 暂未实现")

    def _run(self, para: Any) -> str:
        try:
            # 连接到数据库，使用上下文管理器确保资源自动关闭
            with sqlite3.connect('timer.db') as conn:
                cursor = conn.cursor()
                # 执行 SQL 查询，选择所需字段
                cursor.execute("SELECT time, cycle_rule, task FROM timer")
                # 获取所有查询结果
                rows = cursor.fetchall()

                if not rows:
                    # 若未查询到任何日程记录，返回相应提示
                    return "未找到任何日程记录。"

                # 格式化查询结果，以提高可读性
                formatted_result = []
                for time, cycle_rule, task in rows:
                    formatted_result.append(f"时间: {time}, 循环规则: {cycle_rule}, 执行的事项: {task}")

                # 将格式化后的结果用换行符连接成一个字符串
                result_str = "\n".join(formatted_result)
                return result_str

        except sqlite3.Error as e:
            # 捕获数据库操作过程中可能出现的错误，并返回详细错误信息
            return f"数据库查询出错: {str(e)}"


if __name__ == "__main__":
    # 创建 QueryTimerDB 工具的实例
    tool = QueryTimerDB()
    # 调用工具的 run 方法执行查询
    result = tool.run("今天日程有那些")
    # 打印查询结果
    print(result)